Skip to content

Conversation

@pdaoust
Copy link
Contributor

@pdaoust pdaoust commented Aug 21, 2025

Closes #537 . Also fixes missing category nav on the tops of all the other pages in the validation category.

NOTE: hold off merging this until 0.6 is the recommended release -- it's got a lot of info about warrants.

Summary by CodeRabbit

  • Documentation

    • Added "Getting an Agent's Status" guide (with examples) and added it to Build → Validation and site navigation.
    • Added top-of-page topic lists to multiple Validation pages for easier navigation.
    • Expanded DHT Operations with a new "Warrant operations" overview.
    • Clarified glossary warrant definition and revised entries/links validity guidance.
  • Bug Fixes

    • Fixed wording issues and corrected anchors/links in DHT Operations.
  • Chores

    • Added markdownlint config (MD007 indent = 4).

@coderabbitai
Copy link

coderabbitai bot commented Aug 21, 2025

Walkthrough

Adds a new "Getting an Agent's Status" documentation page, links to it from Build → Validation and several validation TOCs, updates DHT operations and glossary with warrant-related content, fixes anchors/typos in DHT docs, clarifies get/get_links behavior, and adds a markdownlint config. All edits are documentation/config only.

Changes

Cohort / File(s) Summary
Navigation & Validation index updates
src/pages/_data/navigation/mainNav.json5, src/pages/build/index.md, src/pages/build/validation.md
Add “Getting an Agent's Status” link under Build → Validation and corresponding bullets in index/validation pages.
New documentation page
src/pages/build/getting-an-agents-status.md
Add new page documenting get_agent_activity with Rust examples for checking agent status, warrants, chain status, and a proposal-evaluation example; includes security notes and references.
Validation TOC inserts
src/pages/build/validate-callback.md, src/pages/build/genesis-self-check-callback.md, src/pages/build/must-get-host-functions.md
Insert top-of-page "In this section" topic-list blocks linking Validation-related pages; add brief intro text on validate page.
DHT operations doc
src/pages/build/dht-operations.md
Add topic-list, fix anchors/typos (StoreEntry, Update, RegisterUpdate, RegisterDeleteLink), and append a “Warrant operations” section describing warrants and retrieval via get_agent_activity.
Glossary edits
src/pages/resources/glossary.md
Redefine warrants as signed DHT operation attestations, introduce basis-address, simplify validity conditions, add usage notes and explicit constraint that invalid warrants aren't produced.
Entries & Links docs
src/pages/build/entries.md, src/pages/build/links-paths-and-anchors.md
Clarify get requires the entry-creation action hash; add notes that get, get_links, and get_link_details return data valid for the delivering agent and point readers to the new agent-status page.
Querying & architecture text tweaks
src/pages/build/querying-source-chains.md, src/pages/concepts/2_application_architecture.md
Link get_agent_activity status text to the new page and fix a typographical error in application architecture doc.
Formatting / lint config
.markdownlint.json
Add markdownlint config (MD007 indent: 4).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • ThetaSinner
  • matthme
  • jost-s

Pre-merge checks and finishing touches

✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title "Feat: Getting an agent's status" is concise, focused, and accurately reflects the primary change in this PR — adding documentation and navigation for obtaining an agent's status; it is readable and conveys the main intent to teammates scanning history. The phrasing is specific to the new feature and avoids noisy file lists or vague terms. Overall it summarizes the main change clearly and succinctly.
Linked Issues Check ✅ Passed The PR implements the core acceptance criteria of linked issue [#537] by adding a dedicated page documenting get_agent_activity, describing warrants and chain status, and including practical Rust examples that obtain warrants and evaluate chain state, plus navigation and cross-reference updates and a merge-hold note while warrants stabilize. The changes supply the requested practical examples and explanatory material about warrants and eventual consistency and link the new page from relevant validation docs. Minor deviations in the provided summaries are that the page also notes that the source chain can be queried and includes an ActivityRequest::Full example and the summaries do not explicitly call out countersigning as the primary use case; these are clarifications rather than substantive omissions.
Out of Scope Changes Check ✅ Passed Most edits are in-scope documentation changes supporting the new "Getting an Agent's Status" content (new page, navigation updates, glossary and DHT/warrant text, and cross-references). Out-of-scope items are minimal and limited to repository-style or unrelated minor edits such as adding .markdownlint.json and a small typographical fix in concepts/2_application_architecture.md, which do not alter runtime behavior but are not strictly required by issue [#537]. Overall the substantive changes relate to the linked issue and out-of-scope edits are small and low-risk.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/get-agent-status

Tip

👮 Agentic pre-merge checks are now available in preview!

Pro plan users can now enable pre-merge checks in their settings to enforce checklists before merging PRs.

  • Built-in checks – Quickly apply ready-made checks to enforce title conventions, require pull request descriptions that follow templates, validate linked issues for compliance, and more.
  • Custom agentic checks – Define your own rules using CodeRabbit’s advanced agentic capabilities to enforce organization-specific policies and workflows. For example, you can instruct CodeRabbit’s agent to verify that API documentation is updated whenever API schema files are modified in a PR. Note: Upto 5 custom checks are currently allowed during the preview period. Pricing for this feature will be announced in a few weeks.

Please see the documentation for more information.

Example:

reviews:
  pre_merge_checks:
    custom_checks:
      - name: "Undocumented Breaking Changes"
        mode: "warning"
        instructions: |
          Pass/fail criteria: All breaking changes to public APIs, CLI flags, environment variables, configuration keys, database schemas, or HTTP/GraphQL endpoints must be documented in the "Breaking Change" section of the PR description and in CHANGELOG.md. Exclude purely internal or private changes (e.g., code not exported from package entry points or explicitly marked as internal).

Please share your feedback with us on this Discord post.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🧹 Nitpick comments (14)
src/pages/_data/navigation/mainNav.json5 (1)

60-60: Navigation entry verified; optional casing nit remains

  • Confirmed src/pages/build/getting-an-agents-status.md exists with frontmatter
      • Title matches: title: "Getting an Agent's Status"
  • Verified the nav item in src/pages/_data/navigation/mainNav.json5 at line 60 points to /build/getting-an-agents-status/
  • All existing cross-references in src/pages/build/*.md resolve correctly to the new slug

Optional nitpick:

  • Across your Build docs (e.g. src/pages/build/dht-operations.md), “DHT operations” sometimes appears as “DHT Operations.” Consider standardizing this casing for consistency.
src/pages/build/validation.md (1)

13-13: Fix unordered-list indentation (MD007) for the new bullet.

The nested list item is indented by 4 spaces but the linter expects 2. Adjust just this line (and consider normalizing the surrounding items in a follow-up).

-    * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent
+  * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent
src/pages/build/index.md (1)

75-76: Wording/casing consistency nit for the new Validation topic.

The description is fine. For consistency with other bullets and the Validation page, consider:

  • Using sentence case for link text/description uniformly across the section.
  • Optionally aligning the description with the same phrasing used on /build/validation/.
-* [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent
+* [Getting an agent's status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent

If the site style guide prefers title case in link text, keep the original casing and ignore this suggestion. Please confirm which convention the docs team wants to follow.

src/pages/build/genesis-self-check-callback.md (1)

5-14: Normalize nested list indentation (MD007) in the new “In this section” block.

The nested bullets are indented by 4 spaces; the linter expects 2.

 * [Validation](/build/validation/)
-    * `genesis_self_check` Callback (this page) --- writing a function to control access to a network
-    * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions
-    * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- Deterministically retrieving DHT data for use in validation
-    * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation
-    * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent
+  * `genesis_self_check` Callback (this page) --- writing a function to control access to a network
+  * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions
+  * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- deterministically retrieving DHT data for use in validation
+  * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation
+  * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent

Note: also lowercased “Deterministically” mid-sentence.

src/pages/build/dht-operations.md (4)

5-15: Align nested list indentation (MD007) in the new “In this section” block.

Same indentation issue as other pages; use 2 spaces for nested bullets.

 * [Validation](/build/validation/)
-    * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network
-    * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions
-    * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- Deterministically retrieving DHT data for use in validation
-    * DHT operations (this page) --- advanced details on the underlying data structure used in DHT replication and validation
-    * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent
+  * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network
+  * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions
+  * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- deterministically retrieving DHT data for use in validation
+  * DHT operations (this page) --- advanced details on the underlying data structure used in DHT replication and validation
+  * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent

84-85: Fix list indentation for the “Effect” bullet under RegisterDeleteLink (MD007).

Indent is 8 spaces; expected 4 for this level.

-        * Effect: Mark a link as deleted, without removing the actual data.
+    * Effect: Mark a link as deleted, without removing the actual data.

69-69: Minor typo: double “the”.

“pointing the the entry and action that replace it.”

-        * Effect: Mark an entry creation action as being replaced by a new one, pointing the the entry and action that replace it. **An entry and its creation action can have multiple actions updating them.**
+        * Effect: Mark an entry creation action as being replaced by a new one, pointing to the entry and action that replace it. **An entry and its creation action can have multiple actions updating them.**

86-91: WarrantOp docs link verified; minor nit on ActivityRequest::Status

Verified that the docs.rs URL for WarrantOp resolves successfully (HTTP 200), so the link and entity name are correct.

Two small suggestions to tighten the guidance:

  • In the “Warrant operations” section, explicitly call out that using get_agent_activity with ActivityRequest::Status will include warrant operations, so readers know they don’t need a full activity range to retrieve them.
  • (Optional) Remind readers that warrant operations are system-only—no custom validation code is required.

Relevant location:

  • File: src/pages/build/dht-operations.md (around lines 86–91)
src/pages/build/must-get-host-functions.md (1)

5-14: Fix nested list indentation (MD007) in the topic-list block.

markdownlint expects a 2-space indent for nested unordered lists. Current items are indented by 4 spaces, which may affect rendering consistency.

Apply this diff:

 * [Validation](/build/validation/)
-    * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network
-    * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions
-    * `must_get_*` Host Functions (this page) --- Deterministically retrieving DHT data for use in validation
-    * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation
-    * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent
+  * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network
+  * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions
+  * `must_get_*` Host Functions (this page) --- Deterministically retrieving DHT data for use in validation
+  * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation
+  * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent
src/pages/build/validate-callback.md (1)

5-14: Fix nested list indentation (MD007) in the topic-list block.

Use a 2-space indent for the nested bullets to satisfy markdownlint and ensure consistent rendering.

Apply this diff:

 * [Validation](/build/validation/)
-    * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network
-    * `validate` Callback (this page) --- basic callback, examples using stub functions
-    * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- Deterministically retrieving DHT data for use in validation
-    * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation
-    * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent
+  * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network
+  * `validate` Callback (this page) --- basic callback, examples using stub functions
+  * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- Deterministically retrieving DHT data for use in validation
+  * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation
+  * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent
src/pages/resources/glossary.md (1)

933-943: Clarify retrieval and usage: how warrants surface to app code.

The definition is solid. Consider adding one sentence linking warrants to retrieval via agent activity to anchor cross-page references.

Apply this diff:

 Warrants are not produced for invalid warrants.
+
+Warrants are retrievable by peers via the agent’s activity authorities (for example, exposed to zome code in the response from `get_agent_activity`), enabling apps to factor them into agent-status checks without querying the entire source chain.
src/pages/build/getting-an-agents-status.md (3)

8-14: Fix nested list indentation (MD007) in the topic-list block.

Match other pages with a 2-space indent for nested bullets.

Apply this diff:

 * [Validation](/build/validation/)
-    * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network
-    * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions
-    * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- Deterministically retrieving DHT data for use in validation
-    * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation
-    * Getting an Agent's Status (this page) --- checking for invalid actions committed by another agent
+  * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network
+  * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions
+  * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- Deterministically retrieving DHT data for use in validation
+  * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation
+  * Getting an Agent's Status (this page) --- checking for invalid actions committed by another agent

126-133: Minor wording: “outside of the scope” → “outside the scope”.

Tighten phrasing.

Apply this diff:

-Vulnerabilities like this are outside of the scope of this document; we recommend you get a third-party security audit for any high-risk hApp involving a multi-party agreement process.
+Vulnerabilities like this are outside the scope of this document; we recommend a third-party security audit for any high-risk hApp involving a multi-party agreement process.

141-146: Deduplicate references and add ChainStatus reference.

Remove the duplicate ActivityRequest entry; consider adding a ChainStatus reference to match the code samples.

Apply this diff:

 * [`hdk::chain::get_agent_activity`](https://docs.rs/hdk/latest/hdk/chain/fn.get_agent_activity.html)
 * [`holochain_zome_types::query::ActivityRequest`](https://docs.rs/holochain_zome_types/latest/holochain_zome_types/query/enum.ActivityRequest.html)
 * [`holochain_zome_types::query::ChainQueryFilter`](https://docs.rs/holochain_zome_types/latest/holochain_zome_types/query/struct.ChainQueryFilter.html)
-* [`holochain_zome_types::query::ActivityRequest`](https://docs.rs/holochain_zome_types/latest/holochain_zome_types/query/enum.ActivityRequest.html)
 * [`holochain_zome_types::query::AgentActivity`](https://docs.rs/holochain_zome_types/latest/holochain_zome_types/query/struct.AgentActivity.html)
+* [`holochain_zome_types::query::ChainStatus`](https://docs.rs/holochain_zome_types/latest/holochain_zome_types/query/enum.ChainStatus.html)
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 7445d0c and 577bffc.

📒 Files selected for processing (9)
  • src/pages/_data/navigation/mainNav.json5 (1 hunks)
  • src/pages/build/dht-operations.md (2 hunks)
  • src/pages/build/genesis-self-check-callback.md (1 hunks)
  • src/pages/build/getting-an-agents-status.md (1 hunks)
  • src/pages/build/index.md (1 hunks)
  • src/pages/build/must-get-host-functions.md (1 hunks)
  • src/pages/build/validate-callback.md (1 hunks)
  • src/pages/build/validation.md (1 hunks)
  • src/pages/resources/glossary.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
src/pages/build/index.md

[grammar] ~75-~75: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ## Testing ::: topic-list * [Testi...

(QB_NEW_EN)

src/pages/build/validation.md

[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro Validation gives shape to...

(QB_NEW_EN)

src/pages/build/dht-operations.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...le: "DHT operations" --- ::: topic-list ### In this section {data-no-toc} * [Valida...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations (this page) --- advanced ...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * [Getting an Agent's Status](/build/gettin...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro An agent receives **DHT o...

(QB_NEW_EN)

src/pages/build/genesis-self-check-callback.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...Self-Check Callback" --- ::: topic-list ### In this section {data-no-toc} * [Valida...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * [Getting an Agent's Status](/build/gettin...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro To enforce access control...

(QB_NEW_EN)

src/pages/build/validate-callback.md

[grammar] ~5-~5: There might be a mistake here.
Context: ... "Validate callback" --- ::: topic-list ### In this section {data-no-toc} * [Valida...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * [Getting an Agent's Status](/build/gettin...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro The validate callback i...

(QB_NEW_EN)

src/pages/build/getting-an-agents-status.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...g an Agent's Status" --- ::: topic-list ### In this section {data-no-toc} * [Valida...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * Getting an Agent's Status (this page) --...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro At certain points in a hA...

(QB_NEW_EN)


[grammar] ~16-~16: There might be a mistake here.
Context: ...ommitted by another agent ::: ::: intro At certain points in a hApp a user may w...

(QB_NEW_EN)


[style] ~24-~24: Consider using a different verb to strengthen your wording.
Context: ...ent_activity.html) host function, which gives information about both chain forks and ...

(GIVE_INFORMATION)


[grammar] ~126-~126: There might be a mistake here.
Context: ... } } ``` !!! info Time-based attacks This approach is still vulnerable to var...

(QB_NEW_EN)


[style] ~132-~132: This phrase is redundant. Consider using “outside”.
Context: ...in fork. Vulnerabilities like this are outside of the scope of this document; we recommen...

(OUTSIDE_OF)


[style] ~132-~132: Using many exclamation marks might seem excessive (in this case: 12 exclamation marks for a text that’s 5345 characters long)
Context: ...olving a multi-party agreement process. !!! ## Query an agent's source chain An a...

(EN_EXCESSIVE_EXCLAMATION)


[grammar] ~149-~149: There might be a mistake here.
Context: ... reading * Core Concepts: Source Chain * [Core Concepts: Validation](/concepts/7_v...

(QB_NEW_EN)


[grammar] ~150-~150: There might be a mistake here.
Context: ...rce_chain/) * Core Concepts: Validation * [Build Guide: DHT Operations: Warrant ope...

(QB_NEW_EN)

src/pages/build/must-get-host-functions.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...et_* Host Functions" --- ::: topic-list ### In this section {data-no-toc} * [Valida...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * [Getting an Agent's Status](/build/gettin...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro Successful [validation](/...

(QB_NEW_EN)

🪛 markdownlint-cli2 (0.17.2)
src/pages/build/validation.md

13-13: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)

src/pages/build/dht-operations.md

9-9: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


10-10: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


11-11: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


12-12: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


13-13: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


84-84: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)

src/pages/build/genesis-self-check-callback.md

9-9: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


10-10: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


11-11: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


12-12: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


13-13: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)

src/pages/build/must-get-host-functions.md

9-9: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


10-10: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


11-11: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


12-12: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


13-13: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)

🪛 GitHub Check: spellcheck
src/pages/build/getting-an-agents-status.md

[warning] 91-91:
Unknown word (Propsal)

🪛 GitHub Actions: Check spelling
src/pages/build/getting-an-agents-status.md

[warning] 91-91: cspell: Unknown word 'Propsal' detected.

🔇 Additional comments (5)
src/pages/build/must-get-host-functions.md (1)

5-14: Nice addition — cross-page navigation improves discoverability.

The “In this section” block aligns with other Validation pages and helps readers follow the flow.

src/pages/build/validate-callback.md (1)

16-18: Intro copy reads well and correctly frames validate’s scope.

Clear and accurate description of Op, action/entry context, and dependency handling via must_get_*.

src/pages/build/getting-an-agents-status.md (3)

94-104: Confirm chain filter API: sequence_range + ActionHashTerminated.

Method and enum names in ChainQueryFilter/range types have changed in past releases. Ensure sequence_range(ChainQueryFilterRange::ActionHashTerminated(proposal_hash, 0)) compiles for your target HDK; otherwise, substitute the current equivalent.

If needed, please paste your HDK version; I can propose an exact, compiling filter snippet.


20-31: Scope and positioning: correct to keep this out of validation callbacks.

Good call highlighting non-determinism; this aligns with Acceptance Criteria to focus on agent-status concerns (warrants, forks) rather than general chain queries.


91-95: Typo in return type & HDK API validation needed

  • In src/pages/build/getting-an-agents-status.md (lines 91–95), update the return type:
    - pub fn is_proposal_currently_good(initiator: AgentPubKey, proposal_hash: ActionHash) -> ExternResult<PropsalStatus> {
    + pub fn is_proposal_currently_good(initiator: AgentPubKey, proposal_hash: ActionHash) -> ExternResult<ProposalStatus> {
  • Manually confirm that ProposalStatus (not PropsalStatus) is the correct enum in your HDK/holochain_zome_types version.
  • Verify that the helper functions and types—get_agent_activity, ChainQueryFilter::new(), and any chained filter-builder methods—exist and haven’t changed in your targeted HDK release.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (2)
src/pages/build/getting-an-agents-status.md (2)

28-29: Broken glossary anchor: use “Validation authority”.

Replace non-existent “dht-authority” anchor with the defined glossary anchor; also pluralize “authority” per glossary entry.

-A warrant is created for _any_ DHT operation that fails app validation, and sent to the [authority](/resources/glossary/#dht-authority) responsible for the warranted author's [agent ID](/build/identifiers/#agent) address. No warrants are created for chain forks, because a warrant is simply a way of informing other agents of an incident on data they might not be an authority on, and agent ID authorities already watch for chain forks.<!-- TODO: change this language if chain fork warrants become a thing -->
+A warrant is created for _any_ DHT operation that fails app validation, and sent to the [validation authorities](/resources/glossary/#validation-authority) responsible for the warranted author's [agent ID](/build/identifiers/#agent) address. No warrants are created for chain forks, because a warrant is simply a way of informing other agents of an incident on data they might not be an authority on, and agent ID authorities already watch for chain forks.<!-- TODO: change this language if chain fork warrants become a thing -->

59-61: Broken glossary anchor in note: “heighbor” → “neighbor”.

-However, most authorities with good connectivity to their [neighbors](/resources/glossary/#heighbor) will discover invalid data and chain forks and publish warrants within seconds after the data is published.
+However, most authorities with good connectivity to their [neighbors](/resources/glossary/#neighbor) will discover invalid data and chain forks and publish warrants within seconds after the data is published.
🧹 Nitpick comments (6)
src/pages/build/getting-an-agents-status.md (6)

24-25: Minor wording: “provides” reads stronger than “gives”.

-You can do this with the [`get_agent_activity`](https://docs.rs/hdk/latest/hdk/chain/fn.get_agent_activity.html) host function, which gives information about both chain forks and collected **warrants** for an agent.
+You can do this with the [`get_agent_activity`](https://docs.rs/hdk/latest/hdk/chain/fn.get_agent_activity.html) host function, which provides information about both chain forks and collected **warrants** for an agent.

8-14: Fix nested list indentation (markdownlint MD007).

Adjust indentation of the “In this section” nested bullets from 4 to 2 spaces.

 * [Validation](/build/validation/)
-    * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network
-    * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions
-    * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- Deterministically retrieving DHT data for use in validation
-    * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation
-    * Getting an Agent's Status (this page) --- checking for invalid actions committed by another agent
+  * [`genesis_self_check` Callback](/build/genesis-self-check-callback/) --- writing a function to control access to a network
+  * [`validate` Callback](/build/validate-callback/) --- basic callback, examples using stub functions
+  * [`must_get_*` Host Functions](/build/must-get-host-functions/) --- Deterministically retrieving DHT data for use in validation
+  * [DHT operations](/build/dht-operations/) --- advanced details on the underlying data structure used in DHT replication and validation
+  * Getting an Agent's Status (this page) --- checking for invalid actions committed by another agent

49-56: Rust: simplify status+warrants check with matches! and is_empty().

Your tuple pattern works, but this is a bit clearer and avoids magic number 0.

-    // The agent is safe if their chain has no forks or invalid data,
-    // and no other authorities have produced warrants.
-    if let (ChainStatus::Valid(_), 0) = (agent_state.status, agent_state.warrants.len()) {
-        return Ok(true);
-    }
-
-    Ok(false)
+    // The agent is safe if their chain has no forks or invalid data,
+    // and no other authorities have produced warrants.
+    Ok(
+        matches!(agent_state.status, ChainStatus::Valid(_))
+            && agent_state.warrants.is_empty(),
+    )

116-121: Rust: use is_empty() for idiomatic checks.

Small readability wins; also keeps style consistent with the earlier sample.

-            if initiator_state.warrants.len() > 0 {
+            if !initiator_state.warrants.is_empty() {
                 return Ok(ProposalStatus::Invalid);
             }
-            if initiator_state.valid_activity.len() == 0 {
+            if initiator_state.valid_activity.is_empty() {
                 return Ok(ProposalStatus::NotAvailable);
             }

134-134: Tighten phrasing: “outside the scope”.

-Vulnerabilities like this are outside of the scope of this document; we recommend you get a third-party security audit for any high-risk hApp involving a multi-party agreement process.
+Vulnerabilities like this are outside the scope of this document; we recommend you get a third-party security audit for any high-risk hApp involving a multi-party agreement process.

141-147: References: remove duplicate ActivityRequest entry (line 146).

Avoid duplication; the first ActivityRequest bullet already covers it.

 * [`holochain_zome_types::query::ChainQueryFilter`](https://docs.rs/holochain_zome_types/latest/holochain_zome_types/query/struct.ChainQueryFilter.html)
-* [`holochain_zome_types::query::ActivityRequest`](https://docs.rs/holochain_zome_types/latest/holochain_zome_types/query/enum.ActivityRequest.html)
 * [`holochain_zome_types::query::AgentActivity`](https://docs.rs/holochain_zome_types/latest/holochain_zome_types/query/struct.AgentActivity.html)
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 577bffc and 7113bdc.

📒 Files selected for processing (1)
  • src/pages/build/getting-an-agents-status.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
src/pages/build/getting-an-agents-status.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...g an Agent's Status" --- ::: topic-list ### In this section {data-no-toc} * [Valida...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * Getting an Agent's Status (this page) --...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro At certain points in a hA...

(QB_NEW_EN)


[grammar] ~16-~16: There might be a mistake here.
Context: ...ommitted by another agent ::: ::: intro At certain points in a hApp a user may w...

(QB_NEW_EN)


[style] ~24-~24: Consider using a different verb to strengthen your wording.
Context: ...ent_activity.html) host function, which gives information about both chain forks and ...

(GIVE_INFORMATION)


[grammar] ~128-~128: There might be a mistake here.
Context: ... } } ``` !!! info Time-based attacks This approach is still vulnerable to var...

(QB_NEW_EN)


[style] ~134-~134: This phrase is redundant. Consider using “outside”.
Context: ...in fork. Vulnerabilities like this are outside of the scope of this document; we recommen...

(OUTSIDE_OF)


[style] ~134-~134: Using many exclamation marks might seem excessive (in this case: 12 exclamation marks for a text that’s 5347 characters long)
Context: ...olving a multi-party agreement process. !!! ## Query an agent's source chain An a...

(EN_EXCESSIVE_EXCLAMATION)


[grammar] ~151-~151: There might be a mistake here.
Context: ... reading * Core Concepts: Source Chain * [Core Concepts: Validation](/concepts/7_v...

(QB_NEW_EN)


[grammar] ~152-~152: There might be a mistake here.
Context: ...rce_chain/) * Core Concepts: Validation * [Build Guide: DHT Operations: Warrant ope...

(QB_NEW_EN)

🪛 markdownlint-cli2 (0.17.2)
src/pages/build/getting-an-agents-status.md

9-9: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


10-10: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


11-11: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


12-12: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


13-13: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)

@pdaoust
Copy link
Contributor Author

pdaoust commented Aug 21, 2025

@coderabbitai change your linting rules for Markdown for all PRs in this repository; indentation for bullets should be four spaces, not two.

@coderabbitai
Copy link

coderabbitai bot commented Aug 21, 2025

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

@pdaoust I'll help you configure the markdown linting rules for this repository. Let me fetch the current CodeRabbit configuration information to provide you with accurate guidance on how to set the bullet indentation to 4 spaces instead of 2.


🛠️ Debug Information Gathered


@pdaoust Based on the configuration schema, I can see that CodeRabbit uses markdownlint for markdown linting, which is currently enabled in your repository. However, CodeRabbit doesn't provide direct configuration options for specific markdownlint rules like bullet indentation spacing within the CodeRabbit configuration itself.

To configure bullet indentation to use 4 spaces instead of 2 spaces for this repository, you have a few options:

Option 1: Create a .markdownlint.json configuration file

You can create a .markdownlint.json file in the root of your repository to configure markdownlint rules:

{
  "MD007": {
    "indent": 4
  }
}

This configures the MD007 rule (unordered list indentation) to use 4 spaces instead of the default 2 spaces.

Option 2: Use CodeRabbit's path instructions

Alternatively, you can use CodeRabbit's path_instructions feature to provide specific guidance for markdown files. You would need to add this to your CodeRabbit configuration:

reviews:
  path_instructions:
    - path: "**/*.md"
      instructions: "For markdown files, bullet point indentation should use 4 spaces instead of 2 spaces. This applies to all unordered lists."

Option 3: Disable markdownlint MD007 rule and add a learning

If you want CodeRabbit to handle this preference directly, you could disable the MD007 rule in markdownlint and add a learning for me to remember this preference.

Recommendation

I recommend Option 1 - creating a .markdownlint.json file, as this is the most direct way to configure markdownlint's behavior for your specific indentation preference. This will ensure that both CodeRabbit's markdownlint integration and any local markdownlint usage follow your preferred 4-space indentation rule.

Would you like me to help you create the .markdownlint.json file, or would you prefer one of the other options?


🧠 Learnings used
Learnt from: pdaoust
PR: holochain/docs-pages#594
File: src/pages/resources/howtos/running-network-infrastructure.md:178-185
Timestamp: 2025-07-31T17:05:08.265Z
Learning: pdaoust prefers to ignore the MD047 rule (files should end with a single newline character) in the holochain/docs-pages repository because it's not applicable to the admonition plugin they're using.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (2)
src/pages/build/dht-operations.md (1)

81-85: Anchor fixed for RegisterDeleteLink — looks good.

The link text and anchor now both reference RegisterDeleteLink. This resolves the prior issue.

src/pages/build/getting-an-agents-status.md (1)

24-29: Glossary/anchor corrections look good.

The glossary reference now uses validation-authority and the warrants intro aligns with the new DHT operations section.

🧹 Nitpick comments (4)
src/pages/build/dht-operations.md (1)

86-91: Warrant operations section is clear; consider tightening cross-references.

Optional polish:

  • Mention explicitly that get_agent_activity returns warrants with either ActivityRequest::Status or ActivityRequest::Full, to reinforce the retrieval path from here.
  • Optionally link “basis address” here to the glossary entry for quick recall, since you introduce a new op type.

Suggested minimal tweak:

-There's one final DHT operation type, a [`WarrantOp`](https://docs.rs/holochain_types/latest/holochain_types/warrant/struct.WarrantOp.html). Rather than being produced from an action, it gets produced by a validator when they discover an invalid operation. Its basis address is the public key of the author of the operation, which means warrants get collected on the agent ID address and can be [retrieved with `get_agent_activity`](/build/getting-an-agents-status/).
+There's one final DHT operation type, a [`WarrantOp`](https://docs.rs/holochain_types/latest/holochain_types/warrant/struct.WarrantOp.html). Rather than being produced from an action, it gets produced by a validator when they discover an invalid operation. Its basis address is the public key of the author of the operation (the agent's [basis address](/resources/glossary/#basis-address)), which means warrants get collected on the agent ID address and can be retrieved via [`get_agent_activity`](/build/getting-an-agents-status/) using either `ActivityRequest::Status` or `ActivityRequest::Full`.
src/pages/build/getting-an-agents-status.md (3)

49-55: Prefer matches! and is_empty() for clarity (and to avoid moving status).

Your tuple-pattern works, but matches! reads clearer and avoids moving agent_state.status.

Apply this diff:

-    // The agent is safe if their chain has no forks or invalid data,
-    // and no other authorities have produced warrants.
-    if let (ChainStatus::Valid(_), 0) = (agent_state.status, agent_state.warrants.len()) {
-        return Ok(true);
-    }
-
-    Ok(false)
+    // The agent is safe if their chain has no forks or invalid data,
+    // and no other authorities have produced warrants.
+    Ok(
+        matches!(agent_state.status, ChainStatus::Valid(_))
+            && agent_state.warrants.is_empty()
+    )

59-61: Avoid time guarantees; soften wording to “typically quickly.”

“Within seconds” may overpromise depending on network conditions. Consider hedging to avoid misleading readers.

-However, most authorities with good connectivity to their [neighbors](/resources/glossary/#neighbor) will discover invalid data and chain forks and publish warrants within seconds after the data is published.
+However, most authorities with good connectivity to their [neighbors](/resources/glossary/#neighbor) typically discover invalid data and chain forks and publish warrants quickly after the data is published.

108-124: Minor idioms: use is_empty() for collections.

No logic issues spotted. Using is_empty() communicates intent and is idiomatic.

-            if initiator_state.warrants.len() > 0 {
+            if !initiator_state.warrants.is_empty() {
                 return Ok(ProposalStatus::Invalid);
             }
-            if initiator_state.valid_activity.len() == 0 {
+            if initiator_state.valid_activity.is_empty() {
                 return Ok(ProposalStatus::NotAvailable);
             }
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 7113bdc and 567fcee.

📒 Files selected for processing (2)
  • src/pages/build/dht-operations.md (3 hunks)
  • src/pages/build/getting-an-agents-status.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
src/pages/build/dht-operations.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...le: "DHT operations" --- ::: topic-list ### In this section {data-no-toc} * [Valida...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations (this page) --- advanced ...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * [Getting an Agent's Status](/build/gettin...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro An agent receives **DHT o...

(QB_NEW_EN)


[grammar] ~82-~82: There might be a mistake here.
Context: ...ors/#define-a-link-type) and action hash * Contents: action <!--TODO: system valida...

(QB_NEW_EN)

src/pages/build/getting-an-agents-status.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...g an Agent's Status" --- ::: topic-list ### In this section {data-no-toc} * [Valida...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * Getting an Agent's Status (this page) --...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro At certain points in a hA...

(QB_NEW_EN)


[grammar] ~16-~16: There might be a mistake here.
Context: ...ommitted by another agent ::: ::: intro At certain points in a hApp a user may w...

(QB_NEW_EN)


[style] ~24-~24: Consider using a different verb to strengthen your wording.
Context: ...ent_activity.html) host function, which gives information about both chain forks and ...

(GIVE_INFORMATION)


[grammar] ~128-~128: There might be a mistake here.
Context: ... } } ``` !!! info Time-based attacks This approach is still vulnerable to var...

(QB_NEW_EN)


[style] ~134-~134: Using many exclamation marks might seem excessive (in this case: 12 exclamation marks for a text that’s 5360 characters long)
Context: ...olving a multi-party agreement process. !!! ## Query an agent's source chain An a...

(EN_EXCESSIVE_EXCLAMATION)


[grammar] ~150-~150: There might be a mistake here.
Context: ... reading * Core Concepts: Source Chain * [Core Concepts: Validation](/concepts/7_v...

(QB_NEW_EN)


[grammar] ~151-~151: There might be a mistake here.
Context: ...rce_chain/) * Core Concepts: Validation * [Build Guide: DHT Operations: Warrant ope...

(QB_NEW_EN)

🪛 markdownlint-cli2 (0.17.2)
src/pages/build/dht-operations.md

9-9: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


10-10: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


11-11: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


12-12: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


13-13: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


69-69: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


81-81: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


82-82: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


83-83: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


84-84: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)

src/pages/build/getting-an-agents-status.md

9-9: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


10-10: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


11-11: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


12-12: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


13-13: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)

🔇 Additional comments (4)
src/pages/build/dht-operations.md (1)

5-14: 4‑space list indentation is fine; ensure the linter is configured to allow it.

MD007 warnings are expected here because the list uses 4 spaces. Given the repo preference (4 spaces), confirm .markdownlint.json includes MD007 with "indent": 4, or that the CI linter is otherwise configured to accept this style.

If you want, I can add the config via a follow-up PR.

src/pages/build/getting-an-agents-status.md (3)

5-14: 4‑space list indentation acknowledged; align linter config to avoid MD007 noise.

Same note as in dht-operations: if CI runs markdownlint with MD007’s default (2), it will complain. Configure MD007 to "indent": 4 in .markdownlint.json to reflect repo convention.


41-47: Confirm current HDK signature/variants in your target Holochain version.

The call pattern get_agent_activity(agent, ChainQueryFilter::new(), ActivityRequest::Status) looks correct. Just a heads-up to verify against the HDK version this doc targets so the snippet doesn’t drift if parameters or enum names change.


96-106: Filter by action hash: confirm ChainQueryFilterRange::ActionHashTerminated semantics.

The intent is clear (ensure the proposal action exists). Double-check the range constructor and the “0” termination offset for the targeted HDK to ensure it selects exactly the action (not a window that could miss or over-include).

If needed, I can propose an alternative using ChainQueryFilter::action_sequence_range or an explicit action hash set once we confirm the current API.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
src/pages/resources/glossary.md (1)

933-942: Consider addressing the long line lengths flagged by markdownlint.

While the content updates to the warrant definition are accurate and well-structured, several lines exceed the 80-character limit. Consider breaking longer sentences into multiple lines for better readability and consistency with the project's markdown linting rules.

For example, line 938 could be reformatted:

-The [basis address](#basis-address) of a warrant is the [agent ID](#agent-id) of the author of the invalid operation; hence, it is sent to and collected by the [validation authorities](#validation-authority) responsible for the agent ID basis address.
+The [basis address](#basis-address) of a warrant is the [agent ID](#agent-id) of 
+the author of the invalid operation; hence, it is sent to and collected by the 
+[validation authorities](#validation-authority) responsible for the agent ID basis address.
src/pages/build/getting-an-agents-status.md (1)

152-152: Add missing trailing newline.

The file should end with a single newline character to comply with markdown linting rules.

+
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 567fcee and 25f7051.

📒 Files selected for processing (4)
  • .markdownlint.json (1 hunks)
  • netlify.toml (1 hunks)
  • src/pages/build/getting-an-agents-status.md (1 hunks)
  • src/pages/resources/glossary.md (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • .markdownlint.json
🧰 Additional context used
🪛 markdownlint-cli2 (0.17.2)
src/pages/resources/glossary.md

933-933: Line length
Expected: 80; Actual: 91

(MD013, line-length)


935-935: Line length
Expected: 80; Actual: 103

(MD013, line-length)


936-936: Line length
Expected: 80; Actual: 186

(MD013, line-length)


938-938: Line length
Expected: 80; Actual: 251

(MD013, line-length)


940-940: Line length
Expected: 80; Actual: 217

(MD013, line-length)

src/pages/build/getting-an-agents-status.md

6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above

(MD022, blanks-around-headings)


9-9: Line length
Expected: 80; Actual: 128

(MD013, line-length)


10-10: Line length
Expected: 80; Actual: 104

(MD013, line-length)


11-11: Line length
Expected: 80; Actual: 132

(MD013, line-length)


12-12: Line length
Expected: 80; Actual: 139

(MD013, line-length)


13-13: Line length
Expected: 80; Actual: 103

(MD013, line-length)


17-17: Line length
Expected: 80; Actual: 348

(MD013, line-length)


22-22: Line length
Expected: 80; Actual: 351

(MD013, line-length)


24-24: Line length
Expected: 80; Actual: 245

(MD013, line-length)


26-26: Line length
Expected: 80; Actual: 231

(MD013, line-length)


28-28: Line length
Expected: 80; Actual: 526

(MD013, line-length)


30-30: Line length
Expected: 80; Actual: 498

(MD013, line-length)


34-34: Line length
Expected: 80; Actual: 311

(MD013, line-length)


59-59: Line length
Expected: 80; Actual: 421

(MD013, line-length)


64-64: Line length
Expected: 80; Actual: 385

(MD013, line-length)


66-66: Line length
Expected: 80; Actual: 315

(MD013, line-length)


92-92: Line length
Expected: 80; Actual: 104

(MD013, line-length)


103-103: Line length
Expected: 80; Actual: 97

(MD013, line-length)


130-130: Line length
Expected: 80; Actual: 269

(MD013, line-length)


131-131: Line length
Expected: 80; Actual: 221

(MD013, line-length)


133-133: Line length
Expected: 80; Actual: 181

(MD013, line-length)


138-138: Line length
Expected: 80; Actual: 221

(MD013, line-length)


152-152: Files should end with a single newline character

(MD047, single-trailing-newline)

🪛 LanguageTool
src/pages/build/getting-an-agents-status.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...g an Agent's Status" --- ::: topic-list ### In this section {data-no-toc} * [Valida...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * Getting an Agent's Status (this page) --...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro At certain points in a hA...

(QB_NEW_EN)


[grammar] ~16-~16: There might be a mistake here.
Context: ...ommitted by another agent ::: ::: intro At certain points in a hApp a user may w...

(QB_NEW_EN)


[grammar] ~127-~127: There might be a mistake here.
Context: ... } } ``` !!! info Time-based attacks This approach is still vulnerable to var...

(QB_NEW_EN)


[style] ~133-~133: Using many exclamation marks might seem excessive (in this case: 12 exclamation marks for a text that’s 5662 characters long)
Context: ...olving a multi-party agreement process. !!! ## Query an agent's source chain An a...

(EN_EXCESSIVE_EXCLAMATION)


[grammar] ~149-~149: There might be a mistake here.
Context: ... reading * Core Concepts: Source Chain * [Core Concepts: Validation](/concepts/7_v...

(QB_NEW_EN)


[grammar] ~150-~150: There might be a mistake here.
Context: ...rce_chain/) * Core Concepts: Validation * [Build Guide: DHT Operations: Warrant ope...

(QB_NEW_EN)

🔇 Additional comments (9)
netlify.toml (1)

2-15: LGTM! Netlify link checking plugin properly configured.

The plugin configuration is well-structured with appropriate settings for HTML link validation. The Google Fonts URL exclusion in skipPatterns is a common and necessary workaround for fonts.googleapis.com reliability issues during automated checks.

src/pages/resources/glossary.md (1)

935-936: Warrant definition updates align with the new documentation.

The simplified warrant conditions and explicit reference to DHT operations are consistent with the new "Getting an Agent's Status" page and the warrant operations section added to DHT operations documentation.

src/pages/build/getting-an-agents-status.md (7)

1-18: LGTM! Well-structured page introduction and navigation.

The page header, navigation section, and introduction clearly establish the purpose and context. The glossary link to warrants is correctly formatted.


20-31: Excellent explanation of warrant mechanics and timing considerations.

The distinction between warrants for validation failures versus chain forks is clearly explained, and the important note about non-deterministic agent state preventing use in validation callbacks is crucial for developers to understand.


36-56: Rust code example is correct and well-documented.

The is_agent_safe_to_interact_with function demonstrates proper usage of get_agent_activity with ActivityRequest::Status. The boolean logic using matches! macro and is_empty() check is appropriate and clearly reflects the safety criteria.


58-60: Important caveat about eventual consistency well-explained.

The info box appropriately warns users about the eventual consistency nature of warrants and chain forks while providing realistic expectations about discovery timing.


68-125: Comprehensive proposal validation example with good security considerations.

The is_proposal_currently_good function provides a thorough example of checking for a specific published action. The ProposalStatus enum covers all relevant states, and the logic properly handles different chain statuses and warrant checks.


127-134: Critical security warnings for time-based attacks.

The documentation appropriately highlights sophisticated attack vectors and recommends professional security audits for high-risk applications. This is essential guidance for developers working with multi-party agreements.


140-152: Comprehensive reference links and further reading.

The reference section provides all relevant API documentation links, and the further reading section creates good cross-connections to related concepts and build guide sections.

@pdaoust pdaoust enabled auto-merge (squash) August 22, 2025 18:41
Copy link
Member

@ThetaSinner ThetaSinner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the second code example is entirely valid. It's showing a specific way to use get_agent_activity and although I would ask some questions to really nail down what it's protecting against if I saw that code appear in an app, I would support its addition. If you want some confidence about a given operation and not just an agent's general state, then checking their chain after that specific operation has been validated by at least one authority is a valid thing to do.

I have some general comments, mostly small. My main theme is about chain fork warrants and whether they should be included at this stage. They exist in the types for Holochain but they will only be produced when unstable-warrants is enabled on a Holochain build and we're not planning to change that right now.

@ThetaSinner
Copy link
Member

ThetaSinner commented Aug 25, 2025

Something that might be worth adding to this documentation is about blocking:

  • When authorities get a warrant and validate it, they're supposed to block the author if the warrant is valid. Equally, discovering a validation failure and issuing a warrant is also supposed to result in the author being blocked.
  • When getting a sticky warrant by fetching a warranted op or an op authored by a warranted agent (I don't actually know which it is off the top of my head, I'd have to look at this), that warrant should get stored and validated and the author should be blocked.
  • In the special case of discovering a warrant through get_agent_activity, Holochain could also store and check the warrant and block the author for you.

No blocking is currently implemented but it is really the point of warrants, to exclude the author from the network. I think that'd be worth mentioning in this page at some point. We're still implementing it though so perhaps it's something to do when the details are ready?

@pdaoust pdaoust force-pushed the feat/get-agent-status branch from 25f7051 to d266c71 Compare September 5, 2025 20:53
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
src/pages/build/must-get-host-functions.md (2)

28-30: Typo: duplicate “as” in info admonition.

Remove the extra word.

-... use an action hash as as a dependency's identifier and retrieve it ...
+... use an action hash as a dependency's identifier and retrieve it ...

116-134: Example code: time-window logic is incorrect and will undercount.

You add 60s to the current action timestamp and use take_while with >=, which filters for future actions. Use a 60s look-back window and explicit bounds; avoid relying on iterator order.

-    // The result is a vector of `RegisterAgentActivity`` DHT ops.
+    // The result is a vector of `RegisterAgentActivity` DHT ops.
     // Let's convert it into a count of the movie creation actions written in
     // the last minute.
-    let take_until_timestamp = action.timestamp().saturating_add(&Duration::new(60, 0));
+    let window_start = action.timestamp().saturating_sub(&Duration::new(60, 0));
     let movie_entry_def = &EntryType::App(UnitEntryTypes::Movie.try_into()?);
     let movies_written_within_window = result
         .iter()
         // Select only the actions that write a movie entry (this naturally
         // filters out anything that isn't an entry creation action, because
         // only they have entry types). Then extract the action data.
         .filter_map(|o| if o.action.hashed.content.entry_type() == Some(movie_entry_def) {
             Some(o.action.hashed.content.clone())
         } else {
             None
         })
-        // Next, only take the ones within the spam window.
-        .take_while(|a| a.timestamp() >= take_until_timestamp)
+        // Next, only keep the ones within the last-minute window.
+        .filter(|a| a.timestamp() >= window_start && a.timestamp() <= action.timestamp())
         // Finally, count the matching actions.
         .count();
♻️ Duplicate comments (1)
src/pages/build/dht-operations.md (1)

86-91: Consider breaking the long sentence for better readability.

The warrant operations description is comprehensive but the single sentence on Line 88 is quite long (467 characters). Consider splitting it into two sentences for better readability.

-There's one final DHT operation type, a [`WarrantOp`](https://docs.rs/holochain_types/latest/holochain_types/warrant/struct.WarrantOp.html). Rather than being produced from an action, it gets produced by a validator when they discover an invalid operation. Its basis address is the public key of the author of the operation, which means warrants get collected on the agent ID address and can be [retrieved with `get_agent_activity`](/build/getting-an-agents-status/).
+There's one final DHT operation type, a [`WarrantOp`](https://docs.rs/holochain_types/latest/holochain_types/warrant/struct.WarrantOp.html). Rather than being produced from an action, it gets produced by a validator when they discover an invalid operation.
+
+Its basis address is the public key of the author of the operation, which means warrants get collected on the agent ID address and can be [retrieved with `get_agent_activity`](/build/getting-an-agents-status/).
🧹 Nitpick comments (8)
src/pages/build/validation.md (1)

13-13: Line length exceeds MD013; either wrap or codify an exception.

If you want to keep single-line bullets in topic-list blocks, prefer handling in markdownlint config (disable MD013 for these blocks). Otherwise, wrap the description to a continuation line.

Optional wrap:

-    * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent
+    * [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid
+      actions committed by another agent
src/pages/build/index.md (1)

75-75: Keep topic-list bullets under MD013 or handle via repo config.

Same note as elsewhere: either wrap the description or disable/enforce exceptions for MD013 in topic-list sections via .markdownlint config.

-* [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid actions committed by another agent
+* [Getting an Agent's Status](/build/getting-an-agents-status/) --- checking for invalid
+  actions committed by another agent
src/pages/build/must-get-host-functions.md (2)

6-6: Fix MD022 (headings need blank lines).

Add a blank line before and after the “In this section” heading inside the topic-list block.

 ::: topic-list
-### In this section {data-no-toc}
+
+### In this section {data-no-toc}
+

9-13: MD013 long lines in topic-list.

Wrap lines or cover via markdownlint config as a project-wide rule for topic-list sections.

src/pages/build/genesis-self-check-callback.md (2)

6-6: Fix MD022 (headings need blank lines).

 ::: topic-list
-### In this section {data-no-toc}
+
+### In this section {data-no-toc}
+

61-63: Narrow the Base64 import.

Avoid glob; import only what’s needed.

-use base64::*;
+use base64::engine::general_purpose::STANDARD as BASE64_STANDARD;
+use base64::Engine;

And update calls accordingly (e.g., BASE64_STANDARD.decode(s)).

src/pages/build/validate-callback.md (2)

6-6: Fix MD022 (headings need blank lines).

 ::: topic-list
-### In this section {data-no-toc}
+
+### In this section {data-no-toc}
+

9-13: MD013 long lines in topic-list.

Wrap or configure markdownlint exceptions for these navigation bullets.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 25f7051 and d266c71.

📒 Files selected for processing (10)
  • .markdownlint.json (1 hunks)
  • src/pages/_data/navigation/mainNav.json5 (1 hunks)
  • src/pages/build/dht-operations.md (3 hunks)
  • src/pages/build/genesis-self-check-callback.md (1 hunks)
  • src/pages/build/getting-an-agents-status.md (1 hunks)
  • src/pages/build/index.md (1 hunks)
  • src/pages/build/must-get-host-functions.md (1 hunks)
  • src/pages/build/validate-callback.md (1 hunks)
  • src/pages/build/validation.md (1 hunks)
  • src/pages/resources/glossary.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • .markdownlint.json
  • src/pages/_data/navigation/mainNav.json5
🧰 Additional context used
🪛 LanguageTool
src/pages/build/dht-operations.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...le: "DHT operations" --- ::: topic-list ### In this section {data-no-toc} * [Valida...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations (this page) --- advanced ...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * [Getting an Agent's Status](/build/gettin...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro An agent receives **DHT o...

(QB_NEW_EN)


[grammar] ~82-~82: There might be a mistake here.
Context: ...ors/#define-a-link-type) and action hash * Contents: action <!--TODO: system valida...

(QB_NEW_EN)

src/pages/build/genesis-self-check-callback.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...Self-Check Callback" --- ::: topic-list ### In this section {data-no-toc} * [Valida...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * [Getting an Agent's Status](/build/gettin...

(QB_NEW_EN)

src/pages/build/getting-an-agents-status.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...g an Agent's Status" --- ::: topic-list ### In this section {data-no-toc} * [Valida...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * Getting an Agent's Status (this page) --...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro At certain points in a hA...

(QB_NEW_EN)


[grammar] ~16-~16: There might be a mistake here.
Context: ...ommitted by another agent ::: ::: intro At certain points in a hApp a user may w...

(QB_NEW_EN)


[grammar] ~127-~127: There might be a mistake here.
Context: ... } } } ``` !!! info Time-based attacks This approach is still vulnerable to var...

(QB_NEW_EN)


[style] ~133-~133: Using many exclamation marks might seem excessive (in this case: 12 exclamation marks for a text that’s 5662 characters long)
Context: ...olving a multi-party agreement process. !!! ## Query an agent's source chain An a...

(EN_EXCESSIVE_EXCLAMATION)


[grammar] ~149-~149: There might be a mistake here.
Context: ... reading * Core Concepts: Source Chain * [Core Concepts: Validation](/concepts/7_v...

(QB_NEW_EN)


[grammar] ~150-~150: There might be a mistake here.
Context: ...rce_chain/) * Core Concepts: Validation * [Build Guide: DHT Operations: Warrant ope...

(QB_NEW_EN)

src/pages/build/index.md

[grammar] ~75-~75: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ## Testing ::: topic-list * [Testi...

(QB_NEW_EN)

src/pages/build/must-get-host-functions.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...et_* Host Functions" --- ::: topic-list ### In this section {data-no-toc} * [Valida...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * [Getting an Agent's Status](/build/gettin...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro Successful [validation](/...

(QB_NEW_EN)

src/pages/build/validate-callback.md

[grammar] ~5-~5: There might be a mistake here.
Context: ... "Validate callback" --- ::: topic-list ### In this section {data-no-toc} * [Valida...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ...etrieving DHT data for use in validation * DHT operations ...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...e used in DHT replication and validation * [Getting an Agent's Status](/build/gettin...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro The validate callback i...

(QB_NEW_EN)

src/pages/build/validation.md

[grammar] ~13-~13: There might be a mistake here.
Context: ...valid actions committed by another agent ::: ::: intro Validation gives shape to...

(QB_NEW_EN)

🪛 markdownlint-cli2 (0.17.2)
src/pages/build/dht-operations.md

6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above

(MD022, blanks-around-headings)


9-9: Line length
Expected: 80; Actual: 128

(MD013, line-length)


10-10: Line length
Expected: 80; Actual: 104

(MD013, line-length)


11-11: Line length
Expected: 80; Actual: 132

(MD013, line-length)


12-12: Line length
Expected: 80; Actual: 125

(MD013, line-length)


13-13: Line length
Expected: 80; Actual: 127

(MD013, line-length)


69-69: Line length
Expected: 80; Actual: 207

(MD013, line-length)


82-82: Line length
Expected: 80; Actual: 120

(MD013, line-length)


88-88: Line length
Expected: 80; Actual: 467

(MD013, line-length)


90-90: Line length
Expected: 80; Actual: 95

(MD013, line-length)

src/pages/build/genesis-self-check-callback.md

6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above

(MD022, blanks-around-headings)


9-9: Line length
Expected: 80; Actual: 101

(MD013, line-length)


10-10: Line length
Expected: 80; Actual: 104

(MD013, line-length)


11-11: Line length
Expected: 80; Actual: 132

(MD013, line-length)


12-12: Line length
Expected: 80; Actual: 139

(MD013, line-length)


13-13: Line length
Expected: 80; Actual: 127

(MD013, line-length)

src/pages/build/must-get-host-functions.md

6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above

(MD022, blanks-around-headings)


9-9: Line length
Expected: 80; Actual: 128

(MD013, line-length)


10-10: Line length
Expected: 80; Actual: 104

(MD013, line-length)


11-11: Line length
Expected: 80; Actual: 109

(MD013, line-length)


12-12: Line length
Expected: 80; Actual: 139

(MD013, line-length)


13-13: Line length
Expected: 80; Actual: 127

(MD013, line-length)

src/pages/build/validate-callback.md

6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above

(MD022, blanks-around-headings)


9-9: Line length
Expected: 80; Actual: 128

(MD013, line-length)


11-11: Line length
Expected: 80; Actual: 132

(MD013, line-length)


12-12: Line length
Expected: 80; Actual: 139

(MD013, line-length)


13-13: Line length
Expected: 80; Actual: 127

(MD013, line-length)

src/pages/build/validation.md

13-13: Line length
Expected: 80; Actual: 127

(MD013, line-length)

src/pages/resources/glossary.md

933-933: Line length
Expected: 80; Actual: 91

(MD013, line-length)


935-935: Line length
Expected: 80; Actual: 103

(MD013, line-length)


936-936: Line length
Expected: 80; Actual: 186

(MD013, line-length)


938-938: Line length
Expected: 80; Actual: 251

(MD013, line-length)


940-940: Line length
Expected: 80; Actual: 217

(MD013, line-length)

🔇 Additional comments (14)
src/pages/build/validation.md (1)

27-29: Nice forward-looking caveat about automatic blocking.

Clear, user-facing note that blocking isn’t implemented yet. Good expectation setting.

src/pages/build/must-get-host-functions.md (1)

148-150: Solid guidance on network costs.

Good warning about fetch costs when chaining must_get_*; this helps devs design cheaper validations.

src/pages/build/genesis-self-check-callback.md (1)

27-29: Accurate status note on membership control.

Clear that it’s not fully implemented yet; aligns with current platform status.

src/pages/build/validate-callback.md (1)

54-55: Good clarification about Ok(Invalid(...)) vs Err.

Prevents misuse of error channel in validation callbacks.

src/pages/build/dht-operations.md (3)

5-14: LGTM! Navigation structure is well-organized.

The added topic list provides clear navigation to validation-related documentation, properly linking to the new "Getting an Agent's Status" page.


69-69: LGTM! Typo correction is accurate.

The fix changes "pointing the the entry" to "pointing to the entry", correctly removing the duplicate article.


81-81: LGTM! Anchor reference is now correct.

The link now correctly points to the RegisterDeleteLink variant instead of the incorrect RegisterCreateLink anchor.

src/pages/resources/glossary.md (1)

933-942: LGTM! Warrant definition improvements are accurate and clear.

The updated definition correctly describes warrants as DHT operations and clarifies the conditions under which they are created. The basis address explanation and usage clarification align well with the technical implementation.

src/pages/build/getting-an-agents-status.md (6)

5-14: LGTM! Navigation structure is consistent and comprehensive.

The topic list properly integrates the new page within the validation documentation hierarchy and provides clear cross-references to related content.


16-18: LGTM! Introduction is clear and technically accurate.

The introduction properly explains the purpose of get_agent_activity and correctly links to the warrant definition in the glossary.


36-56: LGTM! Code example demonstrates proper agent status checking.

The is_agent_safe_to_interact_with function correctly uses get_agent_activity with ActivityRequest::Status and properly checks both chain status and warrants. The pattern matching and boolean logic are accurate.


58-60: LGTM! Important security consideration is clearly explained.

The warning about eventual consistency is crucial for developers to understand the limitations of warrant and chain fork detection.


127-134: LGTM! Security warning addresses real attack vectors.

The time-based attack scenarios are well-documented and the recommendation for third-party security audits is appropriate for high-risk applications.


142-151: LGTM! Reference links are comprehensive and accurate.

All the referenced API documentation links appear correct and provide good coverage of the related types and functions.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (1)
src/pages/build/dht-operations.md (1)

86-91: Split the WarrantOp paragraph for readability and to avoid causal implication.

Break into shorter sentences per prior suggestion; keeps the same meaning while reading cleaner.

-There's one final DHT operation type, a [`WarrantOp`](https://docs.rs/holochain_types/latest/holochain_types/warrant/struct.WarrantOp.html). Rather than being produced from an action, it gets produced by a validator when they discover an invalid operation. Its basis address is the public key of the author of the operation, which means warrants get collected on the agent ID address. Warrants can be [retrieved with `get_agent_activity`](/build/getting-an-agents-status/).
+There's one final DHT operation type, a [`WarrantOp`](https://docs.rs/holochain_types/latest/holochain_types/warrant/struct.WarrantOp.html).
+It's produced by validators when they discover an invalid operation. Its basis address is the public key of the operation's author, so warrants are collected on the agent ID address. Warrants can be [retrieved with `get_agent_activity`](/build/getting-an-agents-status/).
🧹 Nitpick comments (3)
src/pages/build/dht-operations.md (3)

5-14: Add a blank line before the heading inside the topic-list block to satisfy MD022.

This removes the “Headings should be surrounded by blank lines” warning on Line 6.

 ::: topic-list
+
 ### In this section {data-no-toc}

69-69: Tiny grammar tweak for clarity.

“replace it” refers to two nouns (“entry and action”); switch to “replace them.”

-        * Effect: Mark an entry creation action as being replaced by a new one, pointing to the entry and action that replace it. **An entry and its creation action can have multiple actions updating them.**
+        * Effect: Mark an entry creation action as being replaced by a new one, pointing to the entry and action that replace them. **An entry and its creation action can have multiple actions updating them.**

9-13: Optional: address MD013 long-line warnings or disable the rule for docs pages.

Either wrap these long list items with proper continuation indentation, or disable MD013 in your markdownlint config for this repo/content type. Given the number of links, disabling MD013 here is reasonable.

Would you like a PR snippet for .markdownlint.json to disable MD013 (or limit it just under src/pages/)?

Also applies to: 82-82, 84-84

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d266c71 and d727438.

📒 Files selected for processing (2)
  • src/pages/build/dht-operations.md (3 hunks)
  • src/pages/build/getting-an-agents-status.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/pages/build/getting-an-agents-status.md
🧰 Additional context used
🪛 markdownlint-cli2 (0.17.2)
src/pages/build/dht-operations.md

6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above

(MD022, blanks-around-headings)


9-9: Line length
Expected: 80; Actual: 128

(MD013, line-length)


10-10: Line length
Expected: 80; Actual: 104

(MD013, line-length)


11-11: Line length
Expected: 80; Actual: 132

(MD013, line-length)


12-12: Line length
Expected: 80; Actual: 139

(MD013, line-length)


13-13: Line length
Expected: 80; Actual: 103

(MD013, line-length)


82-82: Line length
Expected: 80; Actual: 394

(MD013, line-length)


84-84: Line length
Expected: 80; Actual: 269

(MD013, line-length)

🔇 Additional comments (3)
src/pages/build/dht-operations.md (3)

59-59: StoreEntry anchor looks good.

The explicit {#storeentry} anchor will help stable intra-page linking.


64-67: Update/RegisterUpdate anchors look good.

The {#update} and {#registerupdate} anchors align with the linked variants.


81-84: RegisterDeleteLink anchor fix is correct.

The anchor now targets variant.RegisterDeleteLink; good catch and fix.

Copy link
Member

@ThetaSinner ThetaSinner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is looking good. I have a small number of minor comments.

I didn't find it that easy to track the diffs for this one because it appeared that some things were modified more than once. I've re-reviewed the whole change to make sure I'm reading the latest content and hopefully responding with useful comments.

@pdaoust
Copy link
Contributor Author

pdaoust commented Sep 10, 2025

Thanks!

I didn't find it that easy to track the diffs for this one

sorry, yeah, some of the feedback necessitated some rather extensive rewrites, and I'm sure they overlapped on each other.

@pdaoust pdaoust force-pushed the feat/get-agent-status branch from 927d392 to c7ce2e6 Compare September 10, 2025 17:37
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (1)
src/pages/build/getting-an-agents-status.md (1)

24-24: Fix broken glossary anchor: use “validation-authority”.

The glossary doesn’t define “dht-authority”. Link to the existing “Validation authority” entry.

-In a network where all agents are [authorities](/resources/glossary/#dht-authority) for the full DHT, all invalid data will eventually be discovered by everyone, and their Holochain conductors will automatically block the bad actor at the network level. In a sharded network, discovery of bad actors happens instead through the publishing and discovery of [**warrants**](/resources/glossary/#warrant).
+In a network where all agents are [validation authorities](/resources/glossary/#validation-authority) for the full DHT, all invalid data will eventually be discovered by everyone, and their Holochain conductors will automatically block the bad actor at the network level. In a sharded network, discovery of bad actors happens instead through the publishing and discovery of [**warrants**](/resources/glossary/#warrant).
🧹 Nitpick comments (5)
src/pages/resources/glossary.md (2)

942-942: Clarify sentence: “invalid warrants.”

Small wording tweak improves precision.

-Warrants are not produced for invalid warrants.
+Warrants are not produced in response to invalid warrants.

933-942: Long lines trigger MD013; consider soft-wrapping or disabling per repo policy.

If MD013 is enforced, wrap lines to <=80 chars or add a local markdownlint override consistent with your lint config.

src/pages/build/getting-an-agents-status.md (3)

91-104: Derives for extern return type: add Deserialize + Clone.

Improves FFI ergonomics and parity with other types; harmless even if not strictly required.

-#[derive(Serialize, Debug)]
+#[derive(Serialize, Deserialize, Clone, Debug)]
 pub enum ProposalStatus {

106-110: Derives for extern input type: add Serialize + Clone.

Keeps symmetry with return type and common HDK patterns.

-#[derive(Deserialize, Debug)]
+#[derive(Serialize, Deserialize, Clone, Debug)]
 pub struct IsProposalCurrentlyGoodInput {

174-179: Add trailing newline (MD047).

Ends file with a single newline to satisfy markdownlint.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d727438 and c7ce2e6.

📒 Files selected for processing (2)
  • src/pages/build/getting-an-agents-status.md (1 hunks)
  • src/pages/resources/glossary.md (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-09-08T21:51:44.027Z
Learnt from: pdaoust
PR: holochain/docs-pages#597
File: src/pages/build/getting-an-agents-status.md:141-141
Timestamp: 2025-09-08T21:51:44.027Z
Learning: In the holochain_zome_types::query::AgentActivity struct, the correct field name is `valid_activity`, not `valid_actions`. This field contains the valid activities for an agent according to the official Rust documentation.

Applied to files:

  • src/pages/build/getting-an-agents-status.md
🪛 markdownlint-cli2 (0.17.2)
src/pages/resources/glossary.md

933-933: Line length
Expected: 80; Actual: 91

(MD013, line-length)


935-935: Line length
Expected: 80; Actual: 103

(MD013, line-length)


938-938: Line length
Expected: 80; Actual: 251

(MD013, line-length)


940-940: Line length
Expected: 80; Actual: 217

(MD013, line-length)

src/pages/build/getting-an-agents-status.md

6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above

(MD022, blanks-around-headings)


9-9: Line length
Expected: 80; Actual: 128

(MD013, line-length)


10-10: Line length
Expected: 80; Actual: 104

(MD013, line-length)


11-11: Line length
Expected: 80; Actual: 132

(MD013, line-length)


12-12: Line length
Expected: 80; Actual: 139

(MD013, line-length)


13-13: Line length
Expected: 80; Actual: 103

(MD013, line-length)


17-17: Line length
Expected: 80; Actual: 353

(MD013, line-length)


22-22: Line length
Expected: 80; Actual: 353

(MD013, line-length)


24-24: Line length
Expected: 80; Actual: 401

(MD013, line-length)


26-26: Line length
Expected: 80; Actual: 467

(MD013, line-length)


31-31: Line length
Expected: 80; Actual: 134

(MD013, line-length)


35-35: Line length
Expected: 80; Actual: 112

(MD013, line-length)


38-38: Line length
Expected: 80; Actual: 419

(MD013, line-length)


40-40: Line length
Expected: 80; Actual: 411

(MD013, line-length)


42-42: Line length
Expected: 80; Actual: 640

(MD013, line-length)


44-44: Line length
Expected: 80; Actual: 424

(MD013, line-length)


46-46: Line length
Expected: 80; Actual: 285

(MD013, line-length)


49-49: Line length
Expected: 80; Actual: 323

(MD013, line-length)


49-49: Link fragments should be valid

(MD051, link-fragments)


49-49: Link fragments should be valid

(MD051, link-fragments)


54-54: Line length
Expected: 80; Actual: 321

(MD013, line-length)


60-60: Line length
Expected: 80; Actual: 91

(MD013, line-length)


79-79: Line length
Expected: 80; Actual: 421

(MD013, line-length)


84-84: Line length
Expected: 80; Actual: 394

(MD013, line-length)


86-86: Line length
Expected: 80; Actual: 269

(MD013, line-length)


117-117: Line length
Expected: 80; Actual: 104

(MD013, line-length)


128-128: Line length
Expected: 80; Actual: 97

(MD013, line-length)


155-155: Line length
Expected: 80; Actual: 274

(MD013, line-length)


157-157: Line length
Expected: 80; Actual: 170

(MD013, line-length)


158-158: Line length
Expected: 80; Actual: 367

(MD013, line-length)


160-160: Line length
Expected: 80; Actual: 156

(MD013, line-length)


165-165: Line length
Expected: 80; Actual: 221

(MD013, line-length)


179-179: Files should end with a single newline character

(MD047, single-trailing-newline)

Comment on lines +940 to +941
A warrant may be used by any peer as legitimate grounds for blocking communication with the [agent](#agent) being warranted.<!-- TODO: update this if warrants ever become used as grounds for scrubbing invalid data -->

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Blocking phrasing contradicts “Blocking isn't operational yet.”

Rephrase to reflect current behavior and avoid promising functionality.

-A warrant may be used by any peer as legitimate grounds for blocking communication with the [agent](#agent) being warranted.<!-- TODO: update this if warrants ever become used as grounds for scrubbing invalid data -->
+A warrant may be used by any peer as legitimate grounds for blocking communication with the [agent](#agent) being warranted; Holochain’s automatic blocking is planned but not yet implemented.<!-- TODO: update this if warrants ever become used as grounds for scrubbing invalid data -->
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
A warrant may be used by any peer as legitimate grounds for blocking communication with the [agent](#agent) being warranted.<!-- TODO: update this if warrants ever become used as grounds for scrubbing invalid data -->
A warrant may be used by any peer as legitimate grounds for blocking communication with the [agent](#agent) being warranted; Holochain’s automatic blocking is planned but not yet implemented.<!-- TODO: update this if warrants ever become used as grounds for scrubbing invalid data -->
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

940-940: Line length
Expected: 80; Actual: 217

(MD013, line-length)

🤖 Prompt for AI Agents
In src/pages/resources/glossary.md around lines 940 to 941, the sentence "A
warrant may be used by any peer as legitimate grounds for blocking communication
with the agent being warranted." conflicts with the note that "Blocking isn't
operational yet"; update the phrasing to reflect current behavior (e.g., state
that warrants can be used as grounds for future blocking or for signaling
intent) and avoid implying implemented blocking functionality; keep the wording
concise and conditional (use "may be used in the future" or "could serve as
grounds for blocking once implemented") and remove any language that promises
operational blocking.

@pdaoust pdaoust force-pushed the feat/get-agent-status branch from 3de0237 to 0ad92b7 Compare September 17, 2025 18:44
@cocogitto-bot
Copy link

cocogitto-bot bot commented Sep 17, 2025

✔️ 7dab8c8...0ad92b7 - Conventional commits check succeeded.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (2)
src/pages/build/getting-an-agents-status.md (2)

24-26: Broken glossary anchor: use “validation-authority”.

The glossary anchor is #validation-authority, not #dht-authority.

-In a network where all agents are [authorities](/resources/glossary/#dht-authority) for the full DHT,
+In a network where all agents are [authorities](/resources/glossary/#validation-authority) for the full DHT,

24-36: Avoid contradicting “Blocking isn’t operational yet.”

This paragraph says conductors “will automatically block,” but the callout below says blocking isn’t implemented. Rephrase to remove the claim of current automatic blocking.

-In a network where all agents are [authorities](/resources/glossary/#validation-authority) for the full DHT, all invalid data will eventually be discovered by everyone, and their Holochain conductors will automatically block the bad actor at the network level. In a [sharded](/resources/glossary/#sharding) network, however, news of bad actors spreads instead through the publishing and discovery of [**warrants**](/resources/glossary/#warrant).
+In a network where all agents are [authorities](/resources/glossary/#validation-authority) for the full DHT, all invalid data will eventually be discovered by everyone. In a [sharded](/resources/glossary/#sharding) network, news of bad actors spreads through the publishing and discovery of [**warrants**](/resources/glossary/#warrant).
🧹 Nitpick comments (5)
src/pages/build/must-get-host-functions.md (1)

5-14: Fix MD022: add a blank line before the heading inside topic-list.

markdownlint requires a blank line before “### In this section” when nested. Insert an empty line after the opening ::: topic-list.

 ::: topic-list
+ 
 ### In this section {data-no-toc}
 
 * [Validation](/build/validation/)
src/pages/resources/glossary.md (1)

940-941: Clarify current behavior vs future blocking (keep “future‑correct” stance).

To avoid confusion with pages that state “Blocking isn’t operational yet,” add a brief note that automatic blocking is planned.

-A warrant may be used by any peer as legitimate grounds for blocking communication with the [agent](#agent) being warranted.<!-- TODO: update this if warrants ever become used as grounds for scrubbing invalid data -->
+A warrant may be used by any peer as legitimate grounds for blocking communication with the [agent](#agent) being warranted; automatic blocking by conductors is planned but not yet implemented.<!-- TODO: update this if warrants ever become used as grounds for scrubbing invalid data -->
src/pages/build/dht-operations.md (1)

5-14: Fix MD022: add a blank line before the heading inside topic-list.

Insert an empty line after ::: topic-list so the heading is surrounded by blanks.

 ::: topic-list
+ 
 ### In this section {data-no-toc}
src/pages/build/getting-an-agents-status.md (1)

5-14: Fix MD022: add a blank line before the heading inside topic-list.

Add an empty line after ::: topic-list so the heading is surrounded by blank lines.

 ::: topic-list
+ 
 ### In this section {data-no-toc}
src/pages/build/genesis-self-check-callback.md (1)

5-14: Fix MD022: add a blank line before the heading inside topic-list.

Insert an empty line after ::: topic-list so the heading is surrounded by blanks.

 ::: topic-list
+ 
 ### In this section {data-no-toc}
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3de0237 and 0ad92b7.

📒 Files selected for processing (14)
  • .markdownlint.json (1 hunks)
  • src/pages/_data/navigation/mainNav.json5 (1 hunks)
  • src/pages/build/dht-operations.md (3 hunks)
  • src/pages/build/entries.md (2 hunks)
  • src/pages/build/genesis-self-check-callback.md (1 hunks)
  • src/pages/build/getting-an-agents-status.md (1 hunks)
  • src/pages/build/index.md (1 hunks)
  • src/pages/build/links-paths-and-anchors.md (1 hunks)
  • src/pages/build/must-get-host-functions.md (1 hunks)
  • src/pages/build/querying-source-chains.md (1 hunks)
  • src/pages/build/validate-callback.md (1 hunks)
  • src/pages/build/validation.md (1 hunks)
  • src/pages/concepts/2_application_architecture.md (1 hunks)
  • src/pages/resources/glossary.md (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/pages/build/validation.md
🚧 Files skipped from review as they are similar to previous changes (7)
  • src/pages/_data/navigation/mainNav.json5
  • .markdownlint.json
  • src/pages/build/validate-callback.md
  • src/pages/concepts/2_application_architecture.md
  • src/pages/build/links-paths-and-anchors.md
  • src/pages/build/index.md
  • src/pages/build/entries.md
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-09-08T21:51:44.027Z
Learnt from: pdaoust
PR: holochain/docs-pages#597
File: src/pages/build/getting-an-agents-status.md:141-141
Timestamp: 2025-09-08T21:51:44.027Z
Learning: In the holochain_zome_types::query::AgentActivity struct, the correct field name is `valid_activity`, not `valid_actions`. This field contains the valid activities for an agent according to the official Rust documentation.

Applied to files:

  • src/pages/build/querying-source-chains.md
  • src/pages/build/getting-an-agents-status.md
📚 Learning: 2025-09-11T13:19:23.020Z
Learnt from: pdaoust
PR: holochain/docs-pages#597
File: src/pages/resources/glossary.md:933-939
Timestamp: 2025-09-11T13:19:23.020Z
Learning: In the holochain/docs-pages repository, pdaoust prefers glossary definitions to be "future-correct" rather than strictly reflecting current implementation status, to reduce maintenance burden when features are implemented.

Applied to files:

  • src/pages/resources/glossary.md
  • src/pages/build/dht-operations.md
  • src/pages/build/getting-an-agents-status.md
🪛 markdownlint-cli2 (0.17.2)
src/pages/build/dht-operations.md

6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above

(MD022, blanks-around-headings)

src/pages/build/genesis-self-check-callback.md

6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above

(MD022, blanks-around-headings)

src/pages/build/getting-an-agents-status.md

6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above

(MD022, blanks-around-headings)


41-41: Link fragments should be valid

(MD051, link-fragments)


83-83: Files should end with a single newline character

(MD047, single-trailing-newline)

src/pages/build/must-get-host-functions.md

6-6: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above

(MD022, blanks-around-headings)

🔇 Additional comments (2)
src/pages/build/querying-source-chains.md (1)

92-94: LGTM: clarifies status and warrants link.

The added cross-link to “Getting an Agent’s Status” is helpful and accurate.

src/pages/build/dht-operations.md (1)

86-91: Verify docs.rs target for WarrantOp.

Please confirm the holochain_types::warrant::WarrantOp link resolves to the correct version for the docs’ supported release.

If it differs for your pinned Holochain version, update the crate path or versioned docs URL accordingly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Practical docs for getting an agent's status

4 participants